package com.codingman.springbootdemo4;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;

/*
 * @Controller： @Controller 是一个类级别的注解。它是@Component 的特化。
 * 它将类标记为 Web 请求处理程序。它通常用于提供网页。默认情况下，它返回一个字符串，指示要重定向的路由。
 * 它主要与@RequestMapping注释一起使用。
 */

/*
 * @RequestMapping：用于映射网络请求。它有许多可选元素，例如消耗、标题、方法、名称、参数、路径、生产和值。我们将它与类和方法一起使用。
 */

@Controller
@RequestMapping("books")
public class BooksController {
	
	@Autowired
	BooksService service;
	
	@RequestMapping(value = "/{name}")
	public String getAllBooks(Model m) {
		service.getAllBooks();
		return "book";
	}
}
/*
 * @GetMapping：它将HTTP GET请求映射到特定的处理程序方法。它用于创建获取的 Web 服务端点，它用于代替使用：@RequestMapping(method = RequestMethod.GET)
 * @PostMapping：它将HTTP POST请求映射到特定的处理程序方法。它用于创建创建它的 Web 服务端点，而不是使用：@RequestMapping(method = RequestMethod.POST)
 * @PutMapping：它将HTTP PUT请求映射到特定的处理程序方法上。它用于创建创建或更新的 Web 服务端点它用于代替使用：@RequestMapping(method = RequestMethod.PUT)
 * @DeleteMapping：它将HTTP DELETE请求映射到特定的处理程序方法。它用于创建删除资源的 Web 服务端点。它被使用而不是使用：@RequestMapping(method = RequestMethod.DELETE)
 * @PatchMapping：它将HTTP PATCH请求映射到特定的处理程序方法。它被使用而不是使用：@RequestMapping(method = RequestMethod.PATCH)
 * @RequestBody：用于将HTTP请求与方法参数中的对象绑定。它在内部使用HTTP MessageConverters来转换请求的正文。当我们使用@RequestBody注释方法参数时， Spring 框架会将传入的 HTTP 请求正文绑定到该参数。
 * @ResponseBody：它将方法返回值绑定到响应正文。它告诉 Spring Boot 框架将返回的对象序列化为 JSON 和 XML 格式。
 * @PathVariable：用于从 URI 中提取值。它最适合 RESTful Web 服务，其中 URL 包含路径变量。我们可以在一个方法中定义多个@PathVariable。
 * @RequestParam：用于从 URL 中提取查询参数。它也称为查询参数。它最适合 Web 应用程序。如果 URL 中不存在查询参数，它可以指定默认值。
 * @RequestHeader：用于获取有关 HTTP 请求标头的详细信息。我们使用这个注解作为方法参数。注解的可选元素有name、required、value、defaultValue。对于标题中的每个细节，我们应该指定单独的注释。我们可以在一个方法中多次使用它
 * @RequestAttribute：将方法参数绑定到请求属性。它提供了从控制器方法方便地访问请求属性的方法。借助@RequestAttribute 注释，我们可以访问在服务器端填充的对象。
 */

/*
 * @RestController：可以认为是@Controller和@ResponseBody注解的组合。@RestController 注释本身使用@ResponseBody 注释进行注释。它消除了使用@ResponseBody 注释每个方法的需要。
 */
